home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio 2000 #2 / Ham Radio 2000 - Volume 2.iso / HAMV2 / TCP_IP / TNOS230S / GETLINE.C < prev    next >
C/C++ Source or Header  |  1996-08-29  |  2KB  |  81 lines

  1. /* getline.c version 1.0 PA0GRI */
  2. #include "global.h"
  3. #include "commands.h"
  4.  
  5. #if !defined(_lint)
  6. static char rcsid[] OPTIONAL = "$Id: getline.c,v 1.8 1996/08/29 12:11:16 root Exp root $";
  7. #endif
  8.  
  9. /*
  10.  *    getline()
  11.  *    to read a line from a domain file and return a usefull line
  12.  *    completely assembled (if multy line)
  13.  *    It skips any connent lines. It follows rfc 1133 , 1134 , 1135 , 1136.
  14.  */
  15. char *
  16. getline (FILE * fp)
  17. {
  18. char *line;
  19. char *contline;
  20. char *chrptr1;
  21. char *chrptr2;
  22. int s1 = 0, s2;
  23. int loop = 1;
  24.  
  25.     if (fp == NULLFILE)
  26.         return NULLCHAR;/* just in case */
  27.     line = mallocw (1024);    /* get buffer space */
  28.     while (loop) {
  29.         if (fgets (line, 1023, fp) == NULL) {
  30.             free (line);
  31.             return NULLCHAR;
  32.         }
  33.         if (line[0] == '#' || line[0] == ';')
  34.             continue;    /* skip comment lines */
  35.         if ((s1 = (int) strlen (line)) < 2)
  36.             continue;    /* empty line */
  37.         loop = 0;    /* none of above */
  38.     }
  39.     line[s1 - 1] = '\0';    /*lint !e771 * kill nl */
  40.     if ((chrptr1 = strchr (line, ';')) != NULLCHAR) {
  41.         *chrptr1 = '\0';/* eliminate comment */
  42.         s1 = (int) strlen (line);    /* recompute line size */
  43.     }
  44.     if ((chrptr1 = strchr (line, '(')) != NULLCHAR) {    /* continuation */
  45.         *chrptr1 = ' ';    /* replace with space */
  46.         if ((chrptr2 = strchr (line, ')')) != NULLCHAR) {    /* continuation */
  47.             *chrptr2 = ' ';    /* replace with space */
  48.             return line;    /* complete line */
  49.         }
  50.         loop = 1;
  51.     }
  52.     contline = mallocw (1024);    /* get buffer space */
  53.     while (loop) {
  54.         if (fgets (contline, 1023, fp) == NULL) {
  55.             free (line);
  56.             free (contline);
  57.             return NULLCHAR;
  58.         }
  59.         s2 = (int) strlen (contline);
  60.         contline[s2 - 1] = '\0';    /* kill nl */
  61.         if (contline[0] == '#' || contline[0] == ';')
  62.             continue;    /* skip comment lines */
  63.         if ((s2 = (int) strlen (contline)) < 2)
  64.             continue;    /* empty line */
  65.         if ((chrptr1 = strchr (contline, ';')) != NULLCHAR) {
  66.             *chrptr1 = '\0';    /* eliminate comment */
  67.             s2 = (int) strlen (contline);    /* recompute line size */
  68.         }
  69.         chrptr1 = mallocw ((unsigned) (s1 + s2 + 2));
  70.         sprintf (chrptr1, "%s %s", line, contline);
  71.         free (line);
  72.         line = chrptr1;
  73.         if ((chrptr2 = strchr (line, ')')) != NULLCHAR) {    /* continuation */
  74.             *chrptr2 = ' ';    /* replace with space */
  75.             loop = 0;
  76.         }
  77.     }
  78.     free (contline);
  79.     return line;
  80. }
  81.